SPB Git forge

spb/spb-cloud

Public
10commits 1branches 0releases
3.2 MBsize
maindefault branch
yesterdaylast push
JavaScript 56.7% TypeScript 42.6%
1.4 KB · 41 lines typescript
Raw Blame History
1import { NextRequest, NextResponse } from "next/server";2import { prisma } from "@/lib/prisma";3import { loadFileData, loadVersionData } from "@/lib/storage";45export async function GET(6  request: NextRequest,7  { params }: { params: { id: string; versionId: string } }8) {9  const file = await prisma.file.findUnique({ where: { id: params.id } });10  const version = await prisma.fileVersion.findUnique({11    where: { id: params.versionId },12  });1314  if (!file || !version || version.fileId !== params.id) {15    return NextResponse.json({ error: "Not found" }, { status: 404 });16  }1718  // Only text files can be diffed19  if (!file.mimeType.startsWith("text/") && !file.mimeType.includes("json") && !file.mimeType.includes("xml") && !file.mimeType.includes("javascript") && !file.mimeType.includes("typescript")) {20    return NextResponse.json({ error: "Not a text file" }, { status: 400 });21  }2223  const currentContent = (await loadFileData(file.storagePath, file.isEncrypted)).toString("utf-8");24  const versionContent = (await loadVersionData(version.storagePath, file.isEncrypted)).toString("utf-8");2526  const Diff = await import("diff");27  const patch = Diff.createPatch(28    file.name,29    versionContent,30    currentContent,31    `Version ${version.versionNum}`,32    "Current"33  );3435  return NextResponse.json({36    current: currentContent,37    version: versionContent,38    diff: patch,39  });40}41